﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.SessionState;
using System.Web.Routing;
using System.ServiceModel.Activation;
using OuSuisJeRest;
using Microsoft.WindowsAzure;
using Microsoft.WindowsAzure.ServiceRuntime;
using Microsoft.WindowsAzure.StorageClient;
using OuSuisJeWebRole.OuSuisJeRest;
using System.Web.ApplicationServices;

namespace OuSuisJeWebRole
{
    public class Global : System.Web.HttpApplication
    {

        void Application_Start(object sender, EventArgs e)
        {
            //initialisation storage
            CloudStorageAccount.SetConfigurationSettingPublisher(
                  (configName, configSetter) =>
                  {
                      configSetter(RoleEnvironment.GetConfigurationSettingValue(configName));
                      RoleEnvironment.Changed += (senderr, arg) =>
                      {
                          if (arg.Changes.OfType<RoleEnvironmentConfigurationSettingChange>().Any(change => change.ConfigurationSettingName == configName))
                          {
                              if (!configSetter(RoleEnvironment.GetConfigurationSettingValue(configName)))
                                  RoleEnvironment.RequestRecycle();
                          }
                      };
                  });
            
            CloudStorageAccount cloudStorageAccount = CloudStorageAccount.FromConfigurationSetting("DataConnectionString");
            CloudTableClient.CreateTablesFromModel(typeof(BusinessStorage.OuSuisJeService), cloudStorageAccount.TableEndpoint.ToString(), cloudStorageAccount.Credentials);
            
            RegisterRoutes();
        }
        private void RegisterRoutes()
        {
            // Edit the base address of Service1 by replacing the "Service1" string below
            RouteTable.Routes.Add(new ServiceRoute("OuSuisJe", new WebServiceHostFactory(), typeof(OuSuisJe)));
            RouteTable.Routes.Add(new ServiceRoute("RegisterService", new WebServiceHostFactory(), typeof(RegisterService)));
            RouteTable.Routes.Add(new ServiceRoute("PushNotificationService", new WebServiceHostFactory(), typeof(PushNotificationService)));
            //RouteTable.Routes.Add(new ServiceRoute("AuthenticationService", new WebServiceHostFactory(), typeof(AuthenticationService)));
        }

        void Application_End(object sender, EventArgs e)
        {
            //  Code that runs on application shutdown

        }

        void Application_Error(object sender, EventArgs e)
        {
            // Code that runs when an unhandled error occurs

        }

        void Session_Start(object sender, EventArgs e)
        {
            // Code that runs when a new session is started

        }

        void Session_End(object sender, EventArgs e)
        {
            // Code that runs when a session ends. 
            // Note: The Session_End event is raised only when the sessionstate mode
            // is set to InProc in the Web.config file. If session mode is set to StateServer 
            // or SQLServer, the event is not raised.

        }

    }
}
